package com.master.rl;

import java.sql.*;
import java.text.*;

import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;
import com.master.util.ed.*;
import com.master.util.rl.*;

public class MinutaRL
    extends Transacao {

  FormataDataBean dataFormatada = new FormataDataBean ();
  Parametro_FixoED parametro_FixoED = new Parametro_FixoED ();

  private ExecutaSQL executasql;

  public MinutaRL () {

  }

  public byte[] imprime_Minuta (ResultSet res) throws Excecoes {

    int iTotalPorCTRC = 0;
    int iTotalGeral = 0;
    String sqlBusca = null;

    try {

      GeraXML x = new GeraXML ();
      DecimalFormat dec = new DecimalFormat ("###,###,##0.00");

      ResultSet resCTRC = null;
      this.inicioTransacao ();
      this.executasql = this.sql;

      x.insereDTD ();

      int quantidade_impressa = 0;
      int quantidade_imprimir = 1;
      boolean imprime = true;
      x.insereTagXML ("RELATORIO" , x.ABRE);
      x.insereTagXML ("LISTA_MINUTA" , x.ABRE);

      while (res.next ()) {
        while (imprime) {
          ++quantidade_impressa;
          if (quantidade_impressa == quantidade_imprimir) {
            imprime = false;
          }

          x.insereTagXML ("PROCESSAMENTO" , x.ABRE);

          sqlBusca = "Select " + " Pessoas.NR_CNPJ_CPF, " +
              " Pessoas.NM_RAZAO_SOCIAL, " + " Pessoas.NM_ENDERECO, " +
              " Pessoas.NR_CEP, " + " Pessoas.NM_BAIRRO, " +
              " Cidades.NM_CIDADE, "
              + " Estados.CD_ESTADO " + " FROM " + " Unidades, Pessoas, " +
              " Cidades,  " + " Regioes_Estados, " + " Estados " +
              " WHERE  Unidades.OID_PESSOA = Pessoas.OID_PESSOA "
              + " AND Pessoas.OID_CIDADE = Cidades.OID_CIDADE " +
              " AND Cidades.OID_REGIAO_ESTADO = Regioes_Estados.OID_REGIAO_ESTADO "
              + " AND Regioes_Estados.OID_ESTADO = Estados.OID_ESTADO " +
              " AND Unidades.oid_Unidade = " +
              parametro_FixoED.getOID_Unidade_Padrao ();
          resCTRC = this.executasql.executarConsulta (sqlBusca);
          while (resCTRC.next ()) {
            x.insereElementoXML ("EMPRESA" ,
                                 resCTRC.getString ("NM_RAZAO_SOCIAL") == null ?
                                 "" : resCTRC.getString ("NM_RAZAO_SOCIAL"));
            x.insereElementoXML ("ENDERECO" ,
                                 resCTRC.getString ("NM_ENDERECO") == null ? "" :
                                 resCTRC.getString ("NM_ENDERECO"));
            x.insereElementoXML ("CIDADE" ,
                                 resCTRC.getString ("NM_CIDADE") == null ? "" :
                                 resCTRC.getString ("NM_CIDADE"));
            x.insereElementoXML ("CNPJ" ,
                                 resCTRC.getString ("NR_CNPJ_CPF") == null ? "" :
                                 resCTRC.getString ("NR_CNPJ_CPF"));
          }
          String data = Data.getDataDMY ();
          String hora = Data.getHoraHM ();

          x.insereElementoXML ("HORARIO" , hora);
          x.insereTagXML ("PROCESSAMENTO" , x.FECHA);

          x.insereElementoXML ("DATA" ,
                               res.getString ("DT_Emissao") == null ? "" :
                               dataFormatada.getDT_FormataData (res.getString (
              "DT_Emissao")));

          x.insereTagXML ("REMETENTE" , x.ABRE);

          x.insereElementoXML ("COD" ,
                               res.getString ("NR_Despacho") == null ? "" :
                               res.getString ("NR_Despacho"));
          x.insereElementoXML ("EMISSAO" ,
                               res.getString ("DT_EMISSAO") == null ? "" :
                               dataFormatada.getDT_FormataData (res.getString (
              "DT_EMISSAO")));

          sqlBusca = "Select " + " Pessoas.NR_CNPJ_CPF, " +
              " Pessoas.NM_RAZAO_SOCIAL, " + " Pessoas.NM_ENDERECO, " +
              " Pessoas.NR_CEP, " + " Pessoas.NM_BAIRRO, " +
              " Cidades.NM_CIDADE, "
              + " Estados.CD_ESTADO  " + " FROM " +
              " Pessoas, Cidades, Regioes_Estados,  Estados " +
              " WHERE Pessoas.OID_CIDADE = Cidades.OID_CIDADE "
              +
              " AND Cidades.OID_REGIAO_ESTADO = Regioes_Estados.OID_REGIAO_ESTADO " +
              " AND Regioes_Estados.OID_ESTADO = Estados.OID_ESTADO " +
              " AND Pessoas.OID_Pessoa = '"
              + res.getString ("oid_Pessoa_Remetente") + "'";

          resCTRC = this.executasql.executarConsulta (sqlBusca);
          while (resCTRC.next ()) {
            x.insereElementoXML ("NOME" ,
                                 resCTRC.getString ("NM_RAZAO_SOCIAL") == null ? "" :
                                 resCTRC.getString ("NM_RAZAO_SOCIAL"));
            x.insereElementoXML ("ENDERECO" ,
                                 resCTRC.getString ("NM_ENDERECO") == null ? "" :
                                 resCTRC.getString ("NM_ENDERECO"));
            x.insereElementoXML ("CEP" ,
                                 resCTRC.getString ("NR_CEP") == null ? "" :
                                 resCTRC.getString ("NR_CEP"));
            x.insereElementoXML ("CIDADE" ,
                                 resCTRC.getString ("NM_CIDADE") == null ? "" :
                                 resCTRC.getString ("NM_CIDADE"));
            x.insereElementoXML ("UF" ,
                                 resCTRC.getString ("CD_ESTADO") == null ? "" :
                                 resCTRC.getString ("CD_ESTADO"));
            x.insereElementoXML ("CNPJ" ,
                                 resCTRC.getString ("NR_CNPJ_CPF") == null ? "" :
                                 resCTRC.getString ("NR_CNPJ_CPF"));
          }
          x.insereTagXML ("REMETENTE" , x.FECHA);

          x.insereTagXML ("DESTINATARIO" , x.ABRE);

          sqlBusca = "Select " + " Pessoas.NR_CNPJ_CPF, " +
              " Pessoas.NM_RAZAO_SOCIAL, " + " Pessoas.NM_ENDERECO, " +
              " Pessoas.NR_CEP, " + " Pessoas.NM_BAIRRO, " +
              " Cidades.NM_CIDADE, "
              + " Estados.CD_ESTADO  " + " FROM " +
              " Pessoas, Cidades, Regioes_Estados,  Estados " +
              " WHERE Pessoas.OID_CIDADE = Cidades.OID_CIDADE "
              +
              " AND Cidades.OID_REGIAO_ESTADO = Regioes_Estados.OID_REGIAO_ESTADO " +
              " AND Regioes_Estados.OID_ESTADO = Estados.OID_ESTADO " +
              " AND Pessoas.OID_Pessoa = '"
              + res.getString ("oid_Pessoa_Destinatario") + "'";
          resCTRC = this.executasql.executarConsulta (sqlBusca);
          while (resCTRC.next ()) {
            x.insereElementoXML ("NOME" ,
                                 resCTRC.getString ("NM_RAZAO_SOCIAL") == null ? "" :
                                 resCTRC.getString ("NM_RAZAO_SOCIAL"));
            x.insereElementoXML ("ENDERECO" ,
                                 resCTRC.getString ("NM_ENDERECO") == null ? "" :
                                 resCTRC.getString ("NM_ENDERECO"));
            x.insereElementoXML ("CEP" ,
                                 resCTRC.getString ("NR_CEP") == null ? "" :
                                 resCTRC.getString ("NR_CEP"));
            x.insereElementoXML ("CIDADE" ,
                                 resCTRC.getString ("NM_CIDADE") == null ? "" :
                                 resCTRC.getString ("NM_CIDADE"));
            x.insereElementoXML ("UF" ,
                                 resCTRC.getString ("CD_ESTADO") == null ? "" :
                                 resCTRC.getString ("CD_ESTADO"));
            x.insereElementoXML ("CNPJ" ,
                                 resCTRC.getString ("NR_CNPJ_CPF") == null ? "" :
                                 resCTRC.getString ("NR_CNPJ_CPF"));
          }
          x.insereTagXML ("DESTINATARIO" , x.FECHA);

          x.insereElementoXML ("MODAL_SERVICO" , res.getString ("NM_Modal"));
          x.insereElementoXML ("NM_Produto" , res.getString ("NM_Produto"));
          //                x.insereElementoXML("NR_Peso",res.getString("NR_Peso"));
          x.insereElementoXML ("NR_Volumes" , res.getString ("NR_Volumes"));
          x.insereElementoXML ("VL_Nota_Fiscal" ,
                               dec.format (res.getDouble ("VL_Nota_Fiscal")) == null ?
                               "" : dec.format (res.getDouble ("VL_Nota_Fiscal")));
          x.insereElementoXML ("NR_Peso" ,
                               dec.format (res.getDouble ("NR_Peso")) == null ? "" :
                               dec.format (res.getDouble ("NR_Peso")));
          x.insereElementoXML ("OBSERVACAO" ,
                               res.getString ("TX_Observacao") == null ? "" :
                               res.getString ("TX_Observacao"));
          x.insereElementoXML ("NR_Despacho" ,
                               res.getString ("NR_Despacho") == null ? "" :
                               res.getString ("NR_Despacho"));
          x.insereElementoXML ("NOTA_FISCAL" ,
                               res.getString ("NR_Nota_Fiscal") == null ? "" :
                               res.getString ("NR_Nota_Fiscal"));

          x.insereTagXML ("VIA" , x.ABRE);

          if (quantidade_impressa == 1) {
            x.insereElementoXML ("VIA" , "PRIMEIRA VIA");
          }
          if (quantidade_impressa == 2) {
            x.insereElementoXML ("VIA" , "SEGUNDA VIA");
          }
          x.insereTagXML ("VIA" , x.FECHA);

        }

      }
      x.insereTagXML ("LISTA_MINUTA" , x.FECHA);
      x.insereTagXML ("RELATORIO" , x.FECHA);

      this.fimTransacao (false);

      GeraPDF geraPDF = new GeraPDF ();
      geraPDF.setXML (x.retornaXML ());

      // //  (x.retornaXML ().toString ());

      String CaminhoXSL = System.getProperty ("CaminhoXSL");
      geraPDF.setXSL (new StringBuffer (CaminhoXSL + "Minuta.xsl"));
      geraPDF.parseToBytes ();

      byte[] b = geraPDF.getArrayPDF ();
      return b;

    }
    catch (Exception e) {
      Excecoes exc = new Excecoes ();
      exc.setExc (e);
      exc.setMensagem ("Erro ao imprime_Minuta");
      exc.setClasse (this.getClass ().getName ());
      exc.setMetodo ("imprime_Minuta(ResultSet res)");
      throw exc;
    }
  }

} //classe
